package com.biodiv.miracle.ioc.processor;

/**
 * @author tianquan
 * @date 2024-09-29 下午10:49
 * @descpon BeanPostProcessor 接口为开发者提供了容器中所有 Bean 初始化之前和之后执行自定义逻辑的机会
 */
public interface BeanPostProcessor {

    /**
     * 在 Bean 初始化之前执行的方法
     * 开发者可以使用此方法进行一些预处理操作，例如设置特定属性或进行一些检查
     * 注意，此时 Bean 的属性已经注入，但初始化方法还未执行
     *
     * @param bean     即将被初始化的 Bean 实例
     * @param beanName Bean 在 Spring 容器中的名称
     * @return 处理后的 Bean 实例，如果不需要修改则返回原始的 Bean 实例
     */
    Object postProcessBeforeInitialization(Object bean, String beanName);

    /**
     * 在 Bean 初始化之后执行的方法
     * 开发者可以使用此方法进行一些后处理操作，例如启动一些服务或代理等
     * 注意，此时 Bean 的初始化方法已经执行，Bean 已经准备好被使用
     *
     * @param bean     已经初始化的 Bean 实例
     * @param beanName Bean 在 Spring 容器中的名称
     * @return 处理后的 Bean 实例，如果不需要修改则返回原始的 Bean 实例
     */
    Object postProcessAfterInitialization(Object bean, String beanName);

}

